package tv.athena.live.api.wath

import android.view.ViewGroup
import com.yy.liveplatform.proto.nano.LpfLiveinfo
import com.yy.liveplatform.proto.nano.LpfLiveroomtemplateV2
import tv.athena.live.api.IDataCallback
import tv.athena.live.api.wath.bean.LineStreamInfo
import tv.athena.live.base.arch.IComponentApi
import java.util.concurrent.ConcurrentHashMap

/**
 * Created by chf
 */
interface WatchComponentApi : IComponentApi {

    /**
     * 设置ThunderPlayer 播放器播放
     * @param viewGroup thunderbolt 播放的容器
     * @param lineStreamInfo 流信息
     *
     */
    fun setThunderPlayerView(viewGroup: ViewGroup, lineStreamInfo: LineStreamInfo)

    /**
     * 设置监听房间信息回调 具体可参见
     * @see tv.athena.live.api.wath.RoomInfoV2Listener
     */
    fun setRoomInfoListener(listenerBuilder: (RoomInfoV2Listener.() -> Unit)?)

    /**
     * 添加麦位信息处理接口 具体参见
     * @see  tv.athena.live.api.wath.MicInfoListener
     */
    fun setMicInfoListener(micInfoListener: (MicInfoListener.() -> Unit)?)

    /**
     *  添加cdn 流信息处理接口，具体回调参见
     *  @see  tv.athena.live.api.wath.AudienceLineStreamInfoListener
     */
    fun setLineStreamInfoListener(listener: (AudienceLineStreamInfoListener.() -> Unit)?)

    /**
     * 获取当前缓存的 cdn路线
     */
    fun getCdnLineStreamInfo(): List<LineStreamInfo>?

    /**
     * 获取所有麦位信息
     */
    fun getMicInfos(): ConcurrentHashMap<Int, LpfLiveroomtemplateV2.LiveInterconnectStreamInfo>?

    /**
     * 根据position获取指定麦位信息
     */
    fun getMicInfo(position: Int): LpfLiveroomtemplateV2.LiveInterconnectStreamInfo?

    /**
     * 判断指定uid是否在麦上
     */
    fun getLiveStatusByUid(uid: Long): Boolean

    /**
     * 根据uid获取room info
     */
    fun getLiveRoomInfoV1(uid: Long, liveBzType: Int, callback: IDataCallback<LpfLiveinfo.LiveInfo>)

    /**
     * 获取房间包装信息，如果存在则返回非空
     * @return
     */
    fun getLiveRoomInfo(): LpfLiveroomtemplateV2.LiveRoomInfoV2?

    /**
     *  根据房间类型房间角色查询房间信息
     *  channelTypes：0 普通频道，1 官频，2 公会频道
     *  roleIds：1 ow，2 房间管理员，3 房间超级管理员，4 普通用户
     */
    fun getChannelInfoList(
            channelTypes: IntArray,
            roleIds: IntArray, businessType: IntArray,
            callback: IDataCallback<LpfLiveroomtemplateV2.GetChannelListResp>
    )

    /**
     * 强制刷新麦位信息
     */
    fun forceNotifyMicInfos()

    /**
     * 强制刷新频道信息(会包含麦位信息)
     */
    fun forceNotifyChannelInfo()
}
